Autoencoder একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা unsupervised learning এ ব্যবহৃত হয়, সাধারণত ডেটার সংকোচন (compression) এবং পুনঃনির্মাণ (reconstruction) জন্য। এটি মূলত একটি encoder এবং একটি decoder অংশ নিয়ে গঠিত। Encoder ইনপুট ডেটার সংকুচিত (compressed) বৈশিষ্ট্যগুলি শিখে এবং decoder সেই সংকুচিত বৈশিষ্ট্যগুলি থেকে ডেটা পুনঃনির্মাণ (reconstruct) করে।
এখানে Simple Autoencoder তৈরি করার জন্য CNTK তে একটি মৌলিক উদাহরণ দেওয়া হয়েছে।
1. Autoencoder মডেল তৈরি করা
Autoencoder মডেলটি দুটি মূল অংশে বিভক্ত:
- Encoder: এটি ইনপুট ডেটা থেকে গুরুত্বপূর্ণ বৈশিষ্ট্যগুলো সংগ্রহ করে।
- Decoder: এটি সেই বৈশিষ্ট্যগুলি থেকে ইনপুট ডেটার পুনঃনির্মাণ করে।
এনকোডার এবং ডিকোডার লেয়ার তৈরি
import cntk
import numpy as np
from cntk import layers
# ইনপুট ডেটা আকার
input_dim = 8 # উদাহরণস্বরূপ 8 ডাইমেনশন ইনপুট
hidden_dim = 4 # 4টি নিউরন নিয়ে লুকানো লেয়ার
output_dim = input_dim # আউটপুট আকার ইনপুটের সমান হবে
# ইনপুট ভেরিয়েবল তৈরি
input_var = cntk.input_variable(input_dim)
# Encoder তৈরি
encoder = layers.Dense(hidden_dim, activation=cntk.ops.relu)(input_var)
# Decoder তৈরি
decoder = layers.Dense(output_dim, activation=cntk.ops.sigmoid)(encoder)
# মডেল
autoencoder_model = decoder
এখানে:
- Encoder একটি Dense লেয়ার যা ইনপুট ডেটাকে সংকুচিত (compressed) করে।
- Decoder সংকুচিত ডেটা থেকে পুনঃনির্মাণ (reconstruction) তৈরি করে, আউটপুট আকারের সাথে মেলে।
2. লস ফাংশন এবং অপ্টিমাইজেশন
Autoencoder মডেলের লস ফাংশন সাধারণত Mean Squared Error (MSE) হয়, যা আউটপুট এবং ইনপুটের মধ্যে ভিন্নতা পরিমাপ করে। এই ক্ষেত্রে SGD অপ্টিমাইজার ব্যবহার করা হবে।
from cntk import losses, learners
# লস ফাংশন (Mean Squared Error)
loss = losses.squared_error(autoencoder_model, input_var)
# অপ্টিমাইজেশন (SGD)
learning_rate = 0.1
learner = learners.sgd(autoencoder_model.parameters, learning_rate)
# প্রশিক্ষক (trainer) তৈরি করা
trainer = cntk.Trainer(autoencoder_model, (loss, loss), learner)
3. মডেল প্রশিক্ষণ
এখন আমাদের কাছে একটি প্রস্তুত autoencoder মডেল রয়েছে, যা প্রশিক্ষণের জন্য প্রস্তুত। আমরা একটি সিমুলেটেড ডেটা ব্যবহার করব এবং মডেলটি প্রশিক্ষণ করব।
# উদাহরণস্বরূপ ডেটা (এটি একটি সাধারণ ডেটা, প্রকৃত ডেটা ব্যবহার করবেন)
X_train = np.random.rand(100, input_dim) # 100 স্যাম্পল, প্রতিটি 8 ডাইমেনশন ইনপুট
# প্রশিক্ষণ চলানো
for epoch in range(100): # 100 epoch প্রশিক্ষণ
trainer.train_minibatch({input_var: X_train})
if epoch % 10 == 0:
print(f"Epoch {epoch}, Loss: {trainer.previous_minibatch_loss}")
4. মডেল মূল্যায়ন (Evaluation)
মডেল প্রশিক্ষণের পর, আপনি এটি নতুন ইনপুট ডেটার জন্য মূল্যায়ন করতে পারেন।
# উদাহরণস্বরূপ নতুন ডেটা
X_test = np.random.rand(10, input_dim) # 10 নতুন স্যাম্পল, প্রতিটি 8 ডাইমেনশন ইনপুট
# পূর্বাভাস (reconstruction)
reconstructed_data = autoencoder_model.eval({input_var: X_test})
# আউটপুট
print("Reconstructed Data: ", reconstructed_data)
5. পূর্ণ কোড
import cntk
import numpy as np
from cntk import layers
# ইনপুট ডেটা আকার
input_dim = 8 # উদাহরণস্বরূপ 8 ডাইমেনশন ইনপুট
hidden_dim = 4 # 4টি নিউরন নিয়ে লুকানো লেয়ার
output_dim = input_dim # আউটপুট আকার ইনপুটের সমান হবে
# ইনপুট ভেরিয়েবল তৈরি
input_var = cntk.input_variable(input_dim)
# Encoder তৈরি
encoder = layers.Dense(hidden_dim, activation=cntk.ops.relu)(input_var)
# Decoder তৈরি
decoder = layers.Dense(output_dim, activation=cntk.ops.sigmoid)(encoder)
# মডেল
autoencoder_model = decoder
# লস ফাংশন (Mean Squared Error)
loss = layers.squared_error(autoencoder_model, input_var)
# অপ্টিমাইজেশন (SGD)
learning_rate = 0.1
learner = layers.sgd(autoencoder_model.parameters, learning_rate)
# প্রশিক্ষক (trainer) তৈরি করা
trainer = cntk.Trainer(autoencoder_model, (loss, loss), learner)
# উদাহরণস্বরূপ ডেটা
X_train = np.random.rand(100, input_dim)
# প্রশিক্ষণ চলানো
for epoch in range(100):
trainer.train_minibatch({input_var: X_train})
if epoch % 10 == 0:
print(f"Epoch {epoch}, Loss: {trainer.previous_minibatch_loss}")
# উদাহরণস্বরূপ নতুন ডেটা
X_test = np.random.rand(10, input_dim)
# পূর্বাভাস (reconstruction)
reconstructed_data = autoencoder_model.eval({input_var: X_test})
# আউটপুট
print("Reconstructed Data: ", reconstructed_data)
সারাংশ
- Autoencoder একটি নিউরাল নেটওয়ার্ক আর্কিটেকচার যা ইনপুট ডেটাকে সংকুচিত (compressed) করে এবং তারপরে সেই সংকুচিত ডেটা থেকে পুনঃনির্মাণ (reconstruction) তৈরি করে।
- এটি Encoder এবং Decoder অংশে বিভক্ত।
- CNTK তে একটি simple autoencoder মডেল তৈরি করার জন্য Dense layers, ReLU অ্যাক্টিভেশন, এবং sigmoid অ্যাক্টিভেশন ব্যবহার করা হয়।
- Loss function হিসাবে Mean Squared Error (MSE) এবং SGD অপ্টিমাইজার ব্যবহার করা হয়েছে।
এটি autoencoder মডেল তৈরি এবং প্রশিক্ষণের জন্য একটি সহজ উদাহরণ ছিল।
Read more